home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-09-16 | 6.2 KB | 379 lines | [TEXT/KAHL] |
- /*****
- * StrUtilities.c
- *
- * Routines di utilità per stringhe.
- * © Com&Media, 1994
- *
- * 16/10/94 Scorporo da Utilities.c (Fabio Barbieri)
- * 18/8/94 Prima stesura (Fabio Barbieri)
- *
- *
- *****/
-
-
- /***** Include standard *****/
- #include <stdio.h>
- #include <string.h>
- #include <Script.h>
- #include <TextUtils.h>
-
- /***** Include locali *****/
- #include "StrUtilities.h"
-
- /***** Define macro *****/
-
- /***** Define valori *****/
-
- #pragma segment StrUtilities
-
- /***** Typedef globali *****/
-
- /***** Funzioni esterne *****/
-
- /***** Variabili esterne *****/
-
- /***** Variabili globali *****/
-
- /***** Statiche globali *****/
-
- /***** Function prototyping *****/
-
-
- /****
- * ConcatString(str1,str2)
- *
- * Concatena la stringa <str2> alla stringa <str1>.
- *
- ****/
-
- void ConcatString(Str255 str1,Str255 str2)
- {
- register short i;
-
- for(i = str1[0]; i < str1[0]+str2[0] && i < 255; i++)
- str1[i+1] = str2[i - str1[0] + 1];
- str1[0] = i;
- }
- /* end ConcatString */
-
-
- /****
- * CopyString(str1,str2)
- *
- * Copia la stringa <str2> nella stringa <str1>.
- *
- ****/
-
- void CopyString(Str255 str1, Str255 str2)
- {
- str1[0] = 0;
- ConcatString(str1,str2);
- }
- /* end CopyString */
-
-
- /****
- * CToStr255(CString, PString)
- *
- * Converte la stringa C <CString> nella stringa Pascal <PString>.
- *
- ****/
-
- void CToStr255(char *CString, Str255 PString)
- {
- register short i;
- long len;
-
- len = strlen(CString);
- if (len > 255L)
- len = 255L;
- PString[0] = (short)len;
- for(i = 0; i < (short)len; i++)
- PString[i+1] = CString[i];
- }
- /* end CToStr255 */
-
-
- /****
- * Str255ToC(PString, CString)
- *
- * Converte la stringa Pascal <PString> nella stringa C <CString> (che deve essere lunga
- * 256 bytes.
- *
- ****/
-
- void Str255ToC(Str255 PString, char *CString)
- {
- register short i;
- short len;
-
- len = PString[0];
- for(i = 0; i < len; i++)
- CString[i] = PString[i+1];
- CString[len] = '\0';
- }
- /* end Str255ToC */
-
-
- /****
- * DataItaliana(data)
- *
- * Converte la stringa Pascal <data> dal formato data americano (MM/DD/YYYY) al formato
- * italiano (DD/MM/YYYY).
- *
- ****/
-
- void DataItaliana(Str255 data){
- short len, giorno, mese, anno;
- char *pData;
-
- len = data[0];
- data[len+1] = 0;
- pData = (char *) &data[1];
- sscanf(pData, "%d/%d/%d", &mese, &giorno, &anno);
- sprintf(pData, "%d/%d/%d", giorno, mese, anno);
- data[0] = (short) strlen(pData);
- }
- /* end DataItaliana */
-
-
- /****
- * DataAmericana(data)
- *
- * Converte la stringa Pascal <data> dal formato data italiano (DD/MM/YYYY) al formato
- * americano (MM/DD/YYYY).
- *
- ****/
-
- void DataAmericana(Str255 data)
- {
- short len, giorno, mese, anno;
- char *pData;
-
- len = data[0];
- data[len+1] = 0;
- pData = (char *) &data[1];
- sscanf(pData, "%d/%d/%d", &giorno, &mese, &anno);
- sprintf(pData, "%d/%d/%d", mese, giorno, anno);
- data[0] = (short) strlen(pData);
- }
- /* end DataAmericana */
-
-
- /****
- * SostituisciChar(stringa, ch1, ch2)
- *
- * Sostituisce ogni ricorrenza di <ch1> nella stringa <stringa> con <ch2>.
- *
- ****/
-
- void SostituisciChar(char *stringa, char ch1, char ch2)
- {
- register char *pCh;
-
- while(pCh = strchr(stringa, ch1))
- *pCh = ch2;
- }
- /* end SostituisciChar */
-
-
- /****
- * EliminaRet(stringa1, stringa2)
- *
- * Copia <stringa1> in <stringa2>, sostituendo ogni ricorrenza di ".\r" con ", ".
- *
- ****/
-
- void EliminaRet(char *stringa, short lunghezza)
- {
- register short i;
-
- for(i = 0; i < lunghezza-1; i++)
- if(stringa[i] == '.' && (stringa[i+1] == '\r' || stringa[i+1] == '\n'))
- {
- stringa[i] = ',';
- stringa[i+1] = ' ';
- }
- }
- /* end EliminaRet */
-
-
- /****
- * EliminaRet2(stringa1)
- *
- * Elimina da stringa1 tutti i caratteri "\r".
- *
- ****/
-
- long EliminaRet2(char *stringa)
- {
- long len = 0;
- long leggi = 0;
- long scrivi = 0;
-
- while (stringa[leggi] != '\0')
- {
- if (stringa[leggi] != '\r')
- {
- if (scrivi < leggi)
- stringa[scrivi] = stringa[leggi];
- scrivi++;
- }
- leggi++;
- }
- len = scrivi;
- stringa[scrivi] = '\0';
- return(len);
- }
- /* end EliminaRet2 */
-
-
- /****
- * ClipString(theString,clipWidth)
- *
- * Qualora la lunghezza di <theString> superi <clipWidth>, la riduce ponendo come
- * ultimo carattere '…'.
- *
- ****/
- void ClipString(Str255 theString, short clipWidth)
- {
- short newWidth, newLenght;
-
- newWidth = StringWidth(theString);
- if(newWidth > clipWidth)
- {
- newLenght = theString[0];
- clipWidth = clipWidth - CharWidth('…');
-
- while(newWidth > clipWidth && newLenght > 0)
- {
- newWidth -= CharWidth(theString[newLenght]);
- newLenght--;
- }
-
- newLenght++;
- theString[newLenght] = '…';
- theString[0] = newLenght;
- }
- }
- /* end ClipString */
-
-
- /****
- * IsValidString(theString)
- *
- * Controlla se in <theString> sono presenti caratteri diversi da blank, nel quel caso
- * torna true.
- *
- ****/
-
- Boolean IsValidString(Str255 theString)
- {
- short i;
- Boolean ok;
-
- ok = false;
- for(i = 1; i <= theString[0] && !ok; i++)
- if(theString[i] != ' ')
- ok = true;
- return(ok);
- }
- /* end IsValidString */
-
-
- /****
- * StripStringa(stringa)
- *
- * Elimina i diacritici in <theString> e la pone minuscola.
- *
- ****/
-
- void StripStringa(char *stringa)
- {
- long len;
-
- if(stringa == nil)
- return;
- len = strlen(stringa);
- StripText(stringa, len);
- LowerText(stringa, len);
- }
- /* end StripStringa */
-
-
- /****
- * TrimString(stringa)
- *
- * Data la stringa <stringa>, toglie i blank iniziali e finali, e sostituisce i blank
- * multipli all'interno con uno solo.
- *
- ****/
-
- void TrimString(char *stringa)
- {
- short len, i, j, base;
- char *pStringa;
- Boolean trovato;
-
- len = (short)strlen(stringa);
- if(len == 0)
- return;
-
- for(i = len-1; i >= 0; i--)
- {
- if(stringa[i] == ' ')
- stringa[i] = '\0';
- else
- break;
- }
-
- base = 0;
- for(i = 0; stringa[i] != '\0'; i++)
- {
- if(stringa[i] == ' ')
- base = i+1;
- else
- break;
- }
- if(base > 0)
- {
- i = 0;
- for(pStringa = &stringa[base]; *pStringa != '\0'; pStringa++)
- stringa[i++] = *pStringa;
- stringa[i] = '\0';
- }
-
- base = 0;
- do
- {
- trovato = false;
- for(i = base; stringa[i] != '\0'; i++)
- {
- if(stringa[i] == ' ' && stringa[i+1] == ' ')
- {
- for(j = i+1; stringa[j] != '\0'; j++)
- stringa[j] = stringa[j+1];
- stringa[j] = '\0';
- trovato = true;
- break;
- }
- }
- } while (trovato);
- }
- /* end TrimString */
-
-
- short CountCharOccurences(char *theString, char theChar)
- {
- register short i;
- short count;
-
- if(theString == nil)
- return(0);
- count = 0;
- for(i = 0; theString[i] != '\0'; i++)
- if(theString[i] == theChar)
- count++;
- return(count);
- }
-